﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    class Palavras
    {
        int Palavra;

        int PosicaoHorizontal;
        int PosicaoVertical;
        int DirecionarHorizontal;
        int DirecionarVertical;

        enum Direcao { cima, baixo, direita, esquerda };
        Direcao direcao;

        Random sortear = new Random();

        bool TamanhoDisponivel = true;
        bool CelulasDisponiveis = true;

          

        public Palavras()
        {

        }

        string[] Pronomes = { "banana", "pêra", "maça", "uva", "goiaba", "tangerina", "figo", "sushi", "cachorro"};

        public void escreverNoGrid(int QuantidadeColunas, int QuantidadeLinhas, DataGridView PalavraCruzada)
        {

            for (Palavra = 0; Palavra < Pronomes.Length; Palavra++)
            {
                TamanhoDisponivel = true;

                PosicaoVertical = sortear.Next(0, QuantidadeLinhas);
                PosicaoHorizontal = sortear.Next(0, QuantidadeColunas);

                switch (sortear.Next(1, 5))
                {
                    case 1:
                        direcao = Direcao.cima;
                        break;
                    case 2:
                        direcao = Direcao.baixo;
                        break;
                    case 3:
                        direcao = Direcao.direita;
                        break;
                    case 4:
                        direcao = Direcao.esquerda;
                        break;
                }

                switch (direcao)
                {
                    case Direcao.cima:

                        DirecionarHorizontal = PosicaoHorizontal;
                        DirecionarVertical = PosicaoVertical;

                        if (Pronomes[Palavra].Length >  (PosicaoVertical + 1))
                            TamanhoDisponivel = false;
                        else
                        {
                            CelulasDisponiveis = true;

                            for (int VerificarCelula = 0; VerificarCelula < Pronomes[Palavra].Length; VerificarCelula++)
                            {
                                if (PalavraCruzada.Rows[DirecionarVertical].Cells[PosicaoHorizontal].Value == null || PalavraCruzada.Rows[DirecionarVertical].Cells[PosicaoHorizontal].Value == (object)Pronomes[Palavra][VerificarCelula])
                                {}
                                else
                                {
                                    CelulasDisponiveis = false;
                                }

                                DirecionarVertical--;
                            }

                            DirecionarVertical = PosicaoVertical;

                            if (CelulasDisponiveis == true)
                            {
                                for (int AdicionarLetra = 0; AdicionarLetra < Pronomes[Palavra].Length; AdicionarLetra++)
                                {
                                    PalavraCruzada.Rows[DirecionarVertical].Cells[PosicaoHorizontal].Value = Pronomes[Palavra][AdicionarLetra];
                                    DirecionarVertical--;
                                }
                            }
                        }

                        break;

                    case Direcao.baixo:

                        DirecionarHorizontal = PosicaoHorizontal;
                        DirecionarVertical = PosicaoVertical;

                        if (Pronomes[Palavra].Length > QuantidadeLinhas - (PosicaoVertical + 1))
                            TamanhoDisponivel = false;
                        else
                        {
                            CelulasDisponiveis = true;

                            for (int VerificarCelula = 0; VerificarCelula < Pronomes[Palavra].Length; VerificarCelula++)
                            {
                                if (PalavraCruzada.Rows[DirecionarVertical].Cells[PosicaoHorizontal].Value == null || PalavraCruzada.Rows[DirecionarVertical].Cells[PosicaoHorizontal].Value == (object)Pronomes[Palavra][VerificarCelula])
                                {}
                                else
                                {
                                    CelulasDisponiveis = false;
                                }

                                DirecionarVertical++;
                            }

                            DirecionarVertical = PosicaoVertical;

                            if (CelulasDisponiveis == true)
                            {
                                for (int AdicionarLetra = 0; AdicionarLetra < Pronomes[Palavra].Length; AdicionarLetra++)
                                {
                                    PalavraCruzada.Rows[DirecionarVertical].Cells[PosicaoHorizontal].Value = Pronomes[Palavra][AdicionarLetra];
                                    DirecionarVertical++;
                                }
                            }
                        }

                        break;

                    case Direcao.direita:

                        DirecionarHorizontal = PosicaoHorizontal;
                        DirecionarVertical = PosicaoVertical;

                        if (Pronomes[Palavra].Length > QuantidadeColunas - (PosicaoHorizontal + 1))
                            TamanhoDisponivel = false;
                        else
                        {
                            CelulasDisponiveis = true;

                            for (int VerificarCelula = 0; VerificarCelula < Pronomes[Palavra].Length; VerificarCelula++)
                            {
                                if (PalavraCruzada.Rows[PosicaoVertical].Cells[DirecionarHorizontal].Value == null || PalavraCruzada.Rows[DirecionarVertical].Cells[PosicaoHorizontal].Value == (object)Pronomes[Palavra][VerificarCelula])
                                {}
                                else
                                {
                                    CelulasDisponiveis = false;
                                }


                                DirecionarHorizontal++;
                            }

                            DirecionarHorizontal = PosicaoHorizontal;
                            
                            if (CelulasDisponiveis==true)
                            {
                                for (int AdicionarLetra = 0; AdicionarLetra < Pronomes[Palavra].Length; AdicionarLetra++)
                                {
                                    PalavraCruzada.Rows[PosicaoVertical].Cells[DirecionarHorizontal].Value = Pronomes[Palavra][AdicionarLetra];
                                    DirecionarHorizontal++;
                                }
                            }
                        }

                        break;

                    case Direcao.esquerda:

                        DirecionarHorizontal = PosicaoHorizontal;
                        DirecionarVertical = PosicaoVertical;

                        if (Pronomes[Palavra].Length > (PosicaoHorizontal + 1))
                            TamanhoDisponivel = false;
                        else
                        {
                            CelulasDisponiveis = true;

                            for (int VerificarCelula = 0; VerificarCelula < Pronomes[Palavra].Length; VerificarCelula++)
                            {
                                if (PalavraCruzada.Rows[PosicaoVertical].Cells[DirecionarHorizontal].Value == null || PalavraCruzada.Rows[DirecionarVertical].Cells[PosicaoHorizontal].Value == (object)Pronomes[Palavra][VerificarCelula])
                                {}
                                else
                                {
                                    CelulasDisponiveis = false;
                                }

                                DirecionarHorizontal--;
                            }

                            DirecionarHorizontal = PosicaoHorizontal;

                            if (CelulasDisponiveis == true)
                            {
                                for (int AdicionarLetra = 0; AdicionarLetra < Pronomes[Palavra].Length; AdicionarLetra++)
                                {
                                    PalavraCruzada.Rows[PosicaoVertical].Cells[DirecionarHorizontal].Value = Pronomes[Palavra][AdicionarLetra];
                                    DirecionarHorizontal--;
                                }
                            }
                        }

                        break;
                }

                if (TamanhoDisponivel == false || CelulasDisponiveis == false)
                    Palavra--;
            }
        }
    }
}
